//package com.lin.utils;
//
//
//import org.apache.hadoop.conf.Configuration;
//import org.apache.hadoop.hbase.TableName;
//import org.apache.hadoop.hbase.client.*;
//import org.apache.hadoop.hbase.util.Bytes;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * HBase操作工具类：缓存模式多线程批量提交作业到hbase
// *
// * @Auther: ning.zhang
// * @Email: ning.zhang@phicomm.com
// * @CreateDate: 2018/7/30
// */
//public class HBaseUtils {
//
//    ThreadLocal<List<Put>> threadLocal = new ThreadLocal<List<Put>>();
//    HBaseAdmin admin = null;
//    Connection conn = null;
//
//    private HBaseUtils() {
//        Configuration configuration = new Configuration();
//        configuration.set("hbase.zookeeper.quorum", ServerConfigs.ZK);
//        configuration.set("hbase.rootdir", "hdfs://hadoop-23:8020/hbase");
//
//        try {
//            conn = ConnectionFactory.createConnection();
//            admin = new HBaseAdmin(configuration);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    private static HBaseUtils instance = null;
//
//    public static synchronized HBaseUtils getInstance() {
//        if (null == instance) {
//            instance = new HBaseUtils();
//        }
//        return instance;
//    }
//
//
//    /**
//     * 根据表名获取到HTable实例
//     */
//    public HTable getTable(String tableName) {
//
//        HTable table = null;
//        try {
////            table = new HTable(configuration, tableName);
//            final TableName tname = TableName.valueOf(tableName);
//            table = (HTable) conn.getTable(tname);
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        return table;
//    }
//
//    /**
//     * 批量添加记录到HBase表，同一线程要保证对相同表进行添加操作！
//     *
//     * @param tableName HBase表名
//     * @param rowkey    HBase表的rowkey
//     * @param cf        HBase表的columnfamily
//     * @param column    HBase表的列key
//     * @param value     写入HBase表的值value
//     */
//    public void bulkput(String tableName, String rowkey, String cf, String column, String value) {
//        try {
//            List<Put> list = threadLocal.get();
//            if (list == null) {
//                list = new ArrayList<Put>();
//            }
//            Put put = new Put(Bytes.toBytes(rowkey));
//            put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(column), Bytes.toBytes(value));
//            list.add(put);
//            if (list.size() >= ServerConfigs.CACHE_LIST_SIZE) {
//                HTable table = getTable(tableName);
//                table.put(list);
//                list.clear();
//            } else {
//                threadLocal.set(list);
//            }
////            table.flushCommits();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 添加单条记录到HBase表
//     *
//     * @param tableName HBase表名
//     * @param rowkey    HBase表的rowkey
//     * @param cf        HBase表的columnfamily
//     * @param column    HBase表的列key
//     * @param value     写入HBase表的值value
//     */
//    public void put(String tableName, String rowkey, String cf, String column, String value) {
//
//        HTable table = getTable(tableName);
//        Put put = new Put(Bytes.toBytes(rowkey));
//        put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(column), Bytes.toBytes(value));
//        try {
//            table.put(put);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * test
//     *
//     * @param args
//     */
//    public static void main(String[] args) {
//
//        //HTable table = HBaseUtils.getInstance().getTable("imooc_course_clickcount");
//        //System.out.println(table.getName().getNameAsString());
//        long start = System.currentTimeMillis();
//
//        String tableName = "t1";
////        String rowkey = "1";
//        for (int i = 0; i < 100000; i++) {
//            HBaseUtils.getInstance().bulkput(tableName, i + "", "f1", "id", String.valueOf(100321 + i));
//        }
//        new Thread(new Runnable() {
//            public void run() {
//                for (int i = 100000; i < 200000; i++) {
//                    HBaseUtils.getInstance().bulkput("t1", i + "", "f1", "id", String.valueOf(100321 + i));
//                }
//            }
//        }).start();
//
//        System.out.println(System.currentTimeMillis() - start);
//    }
//
//}
